জ্যাসমিনজেএস হলো একটি বিহেভিয়র-ড্রিভেন ডেভেলপমেন্ট (BDD) টেস্টিং ফ্রেমওয়ার্ক, যা JavaScript কোড টেস্ট করার জন্য ব্যবহৃত হয়। এটি মূলত ব্রাউজার এবং Node.js উভয়ের জন্যই কাজ করে এবং ডেভেলপারদের জন্য JavaScript কোডের স্বয়ংক্রিয় টেস্ট লিখতে সাহায্য করে। JasmineJS এর অন্যতম বৈশিষ্ট্য হলো এটি কোনো ডম (DOM), ব্রাউজার, বা JavaScript ফ্রেমওয়ার্কের ওপর নির্ভর করে না, ফলে এটি সহজেই বিভিন্ন JavaScript অ্যাপ্লিকেশনে ইন্টিগ্রেট করা যায়।
JasmineJS হলো একটি বিহেভিয়ার-ড্রাইভেন ডেভেলপমেন্ট (BDD) ভিত্তিক JavaScript টেস্টিং ফ্রেমওয়ার্ক। এটি বিশেষভাবে unit testing এবং integration testing এর জন্য ব্যবহৃত হয়। JasmineJS ডেভেলপারদের JavaScript কোডের জন্য কোনো ব্রাউজার বা DOM এর উপর নির্ভর না করে সরাসরি টেস্ট করার সুবিধা দেয়। এটি Node.js, Angular, এবং অন্যান্য JavaScript ফ্রেমওয়ার্ক ও লাইব্রেরির জন্য বিশেষভাবে উপযোগী।
JasmineJS এর মাধ্যমে specs এবং test suites লেখা হয়, যেখানে কোডের বিভিন্ন ইউনিট বা ফাংশনকে পরীক্ষা করা হয়। এটি assertion library হিসেবে কাজ করে এবং describe, it, এবং expect ব্লকের মাধ্যমে টেস্ট লেখা হয়। Jasmine এর একটি বড় সুবিধা হলো, এটি spy এবং mocking ফিচার সমর্থন করে, যার মাধ্যমে ফাংশনের আউটপুট কিভাবে নিরীক্ষণ করা যায় তা নিয়ন্ত্রণ করা সম্ভব।
BBD ভিত্তিক: JasmineJS একটি Behavior-Driven Development (BDD) ফ্রেমওয়ার্ক, যা টেস্ট লেখার সময় কোডের আচরণ এবং ফাংশনালিটির উপর বেশি জোর দেয়।
Simple Syntax: JasmineJS এর সিনট্যাক্স খুবই সহজ এবং সরল, যার মাধ্যমে টেস্ট কোড লেখা অনেক সহজ হয়ে যায়।
No External Dependencies: JasmineJS অন্য কোনো নির্ভরশীলতা ছাড়া সরাসরি ব্যবহার করা যায়। এটি ব্রাউজার, DOM, বা অন্য কোনো টুলের উপর নির্ভর করে না।
Spies and Mocking: JasmineJS এর spies এবং mocking ফিচারের মাধ্যমে ফাংশন এবং মেথডের কল স্ট্যাটাস পরীক্ষা করা যায়। এর মাধ্যমে কোন ফাংশন কতবার কল করা হয়েছে বা কোনো নির্দিষ্ট আর্গুমেন্ট পাস করা হয়েছে কিনা তা জানা যায়।
Async Support: JasmineJS asynchronous টেস্ট সমর্থন করে, যার মাধ্যমে অ্যাসিঙ্ক্রোনাস ফাংশন এবং প্রমিস টেস্ট করা যায়।
Test Suites: JasmineJS টেস্টগুলোকে describe ব্লকের মাধ্যমে গ্রুপ করা যায়, যা টেস্ট ম্যানেজমেন্টকে আরও সহজ করে।
Matchers: JasmineJS-এ অনেক ধরনের matchers দেওয়া আছে, যেমন toEqual, toBe, toBeTruthy, toContain, ইত্যাদি, যেগুলো টেস্ট assertions হিসেবে ব্যবহার করা হয়।
JasmineJS শুরু করার জন্য প্রথমে আপনার সিস্টেমে এটি ইনস্টল করতে হবে। আপনি JasmineJS বিভিন্নভাবে সেটআপ করতে পারেন, যেমন npm এর মাধ্যমে বা সরাসরি ব্রাউজার থেকে script ট্যাগ ব্যবহার করে।
Node.js প্রজেক্টে JasmineJS ইনস্টল করতে, প্রথমে npm এর মাধ্যমে এটি ইনস্টল করতে হবে:
npm install --save-dev jasmine
ইনস্টলেশন সম্পন্ন হলে Jasmine ইনিশিয়ালাইজ করতে পারেন:
npx jasmine init
এটি spec ডিরেক্টরি তৈরি করবে এবং প্রজেক্টে Jasmine টেস্ট ফাইল যোগ করবে।
আপনি JasmineJS কে সরাসরি ব্রাউজারে script ট্যাগের মাধ্যমে ব্যবহার করতে পারেন। নিচে HTML ফাইলে JasmineJS সেটআপ করার উদাহরণ দেওয়া হলো:
এভাবে, আপনি ব্রাউজার থেকে সরাসরি Jasmine টেস্ট চালাতে পারবেন।
JasmineJS এর প্রধান টেস্টিং কনসেপ্টগুলো হলো describe, it, এবং expect। এই কনসেপ্টগুলো ব্যবহার করে টেস্ট লেখা হয়।
describe ব্লকdescribe হলো একটি টেস্ট suite, যা টেস্ট গ্রুপ করতে সাহায্য করে। এর ভেতরে বিভিন্ন টেস্ট কেস বা it ব্লক থাকে।
describe("A suite for basic math functions", function() {
// টেস্ট কেস এখানে থাকবে
});
it ব্লকit হলো একটি নির্দিষ্ট টেস্ট কেস। এর মাধ্যমে একটি নির্দিষ্ট ফাংশন বা কার্যক্রম টেস্ট করা হয়।
it("should add two numbers correctly", function() {
// টেস্ট লজিক এখানে থাকবে
});
expect ব্লকexpect হলো assertion বা matcher, যা দিয়ে আমরা পরীক্ষা করি ফাংশনটির আউটপুট সঠিক কিনা।
expect(1 + 1).toEqual(2); // টেস্ট সফল হলে এটি পাস করবে
describe("A basic math test", function() {
it("should add two numbers", function() {
var sum = 1 + 1;
expect(sum).toEqual(2); // টেস্ট সফল হবে
});
it("should multiply two numbers", function() {
var product = 2 * 3;
expect(product).toEqual(6); // টেস্ট সফল হবে
});
});
এই উদাহরণে দুটি টেস্ট কেস রয়েছে: একটি যোগফল টেস্ট এবং একটি গুণফল টেস্ট। Jasmine expect ব্লক ব্যবহার করে পরীক্ষা করা হয়েছে যে ফাংশনটি সঠিক আউটপুট প্রদান করছে কিনা।
JasmineJS এ বিভিন্ন ধরনের Matchers রয়েছে, যেগুলোর মাধ্যমে assertions লেখা হয়। কিছু গুরুত্বপূর্ণ Matchers নিচে দেওয়া হলো:
toEqual: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে দুইটি ভ্যালু সমান কিনা।
expect(1 + 1).toEqual(2);
toBe: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে ভ্যালুগুলো একই অবজেক্ট বা রেফারেন্স কিনা।
expect(true).toBe(true);
toBeTruthy: এটি পরীক্ষা করে যে ভ্যালুটি সত্য (truthy) কিনা।
expect(1).toBeTruthy();
toBeFalsy: এটি পরীক্ষা করে যে ভ্যালুটি মিথ্যা (falsy) কিনা।
expect(0).toBeFalsy();
toContain: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে একটি অ্যারের মধ্যে নির্দিষ্ট ভ্যালু আছে কিনা।
expect([1, 2, 3]).toContain(2);
toBeDefined: এটি পরীক্ষা করে যে ভেরিয়েবলটি ডিফাইন্ড আছে কিনা।
expect(someVariable).toBeDefined();
Spies এবং Mocking এর মাধ্যমে আপনি ফাংশনের আচরণ এবং কল স্ট্যাটাস ট্র্যাক করতে পারেন। Spies এর মাধ্যমে আপনি জানতে পারবেন যে কোন ফাংশনটি কতবার কল করা হয়েছে, কোন আর্গুমেন্ট পাস করা হয়েছে, ইত্যাদি।
describe("A spy example", function() {
var calculator = {
add: function(a, b) {
return a + b;
}
};
beforeEach(function() {
spyOn(calculator, 'add'); // add ফাংশনের উপর স্পাই করা হয়েছে
});
it("should track calls to the add function", function() {
calculator.add(1, 2);
expect(calculator.add).toHaveBeenCalled();
expect(calculator.add).toHaveBeenCalledWith(1, 2);
});
});
এখানে spyOn ব্যবহার করে calculator.add ফাংশনের উপর স্পাই করা হয়েছে এবং এটি ট্র্যাক করা হয়েছে যে ফাংশনটি কতবার কল করা হয়েছে এবং কি আর্গুমেন্ট পাস করা হয়েছে।
JasmineJS asynchronous ফাংশন এবং প্রমিস টেস্ট করার ক্ষমতা রাখে। অ্যাসিঙ্ক টেস্টের জন্য Jasmine এ done ফাংশন ব্যবহার করা হয়, যা টেস্ট সম্পন্ন হওয়ার পর কল করা হয়।
describe("An async test", function() {
it("should fetch data asynchronously", function(done) {
setTimeout(function() {
var data = "Hello, Jasmine!";
expect(data).toEqual("Hello, Jasmine!");
done(); // টেস্ট শেষ করার জন্য done ফাংশন কল করতে হবে
}, 1000);
});
});
এখানে setTimeout ফাংশন দিয়ে অ্যাসিঙ্ক্রোনাস টেস্ট করা হয়েছে এবং done ফাংশন কল করে টেস্ট শেষ করা হয়েছে।
সারল্য: JasmineJS এর সিনট্যাক্স খুবই সহজ, ফলে ডেভেলপাররা কম সময়ে টেস্ট কেস লিখতে পারে।
BDD ভিত্তিক টেস্টিং: JasmineJS বিহেভিয়ার-ড্রাইভেন ডেভেলপমেন্ট (BDD) ফ্রেমওয়ার্ক, যা কোডের আচরণ অনুযায়ী টেস্ট কেস লিখতে সাহায্য করে।
Spies এবং Mocking: JasmineJS এর spies এবং mocking ফিচারের মাধ্যমে ফাংশন কল ট্র্যাক করা এবং আউটপুট নিরীক্ষণ করা খুবই সহজ।
ব্রাউজার নিরপেক্ষ: JasmineJS ব্রাউজার বা DOM এর উপর নির্ভর করে না, ফলে এটি বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়।
বড় প্রজেক্টে ব্যবহারের ক্ষেত্রে সীমাবদ্ধতা: বড় স্কেল অ্যাপ্লিকেশন টেস্ট করার সময় JasmineJS কিছু ক্ষেত্রে জটিল হতে পারে, বিশেষ করে অনেক বেশি টেস্ট কেস পরিচালনার ক্ষেত্রে।
কাস্টম রিপোর্টিং: JasmineJS এ কাস্টম টেস্ট রিপোর্ট তৈরি করা সীমিত হতে পারে।
JasmineJS হলো একটি শক্তিশালী এবং সহজে ব্যবহারযোগ্য JavaScript টেস্টিং ফ্রেমওয়ার্ক, যা ডেভেলপারদের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট করতে সহায়ক। এর সরল সিনট্যাক্স, spies, এবং asynchronous টেস্টিং ক্ষমতা এটি ডেভেলপারদের জন্য জনপ্রিয় করে তুলেছে। ছোট ও মাঝারি আকারের প্রজেক্টে JasmineJS ব্যবহার করা খুবই কার্যকর, বিশেষ করে যদি আপনি BDD পদ্ধতিতে টেস্টিং করতে চান।
জ্যাসমিনজেএস হলো একটি বিহেভিয়র-ড্রিভেন ডেভেলপমেন্ট (BDD) টেস্টিং ফ্রেমওয়ার্ক, যা JavaScript কোড টেস্ট করার জন্য ব্যবহৃত হয়। এটি মূলত ব্রাউজার এবং Node.js উভয়ের জন্যই কাজ করে এবং ডেভেলপারদের জন্য JavaScript কোডের স্বয়ংক্রিয় টেস্ট লিখতে সাহায্য করে। JasmineJS এর অন্যতম বৈশিষ্ট্য হলো এটি কোনো ডম (DOM), ব্রাউজার, বা JavaScript ফ্রেমওয়ার্কের ওপর নির্ভর করে না, ফলে এটি সহজেই বিভিন্ন JavaScript অ্যাপ্লিকেশনে ইন্টিগ্রেট করা যায়।
JasmineJS হলো একটি বিহেভিয়ার-ড্রাইভেন ডেভেলপমেন্ট (BDD) ভিত্তিক JavaScript টেস্টিং ফ্রেমওয়ার্ক। এটি বিশেষভাবে unit testing এবং integration testing এর জন্য ব্যবহৃত হয়। JasmineJS ডেভেলপারদের JavaScript কোডের জন্য কোনো ব্রাউজার বা DOM এর উপর নির্ভর না করে সরাসরি টেস্ট করার সুবিধা দেয়। এটি Node.js, Angular, এবং অন্যান্য JavaScript ফ্রেমওয়ার্ক ও লাইব্রেরির জন্য বিশেষভাবে উপযোগী।
JasmineJS এর মাধ্যমে specs এবং test suites লেখা হয়, যেখানে কোডের বিভিন্ন ইউনিট বা ফাংশনকে পরীক্ষা করা হয়। এটি assertion library হিসেবে কাজ করে এবং describe, it, এবং expect ব্লকের মাধ্যমে টেস্ট লেখা হয়। Jasmine এর একটি বড় সুবিধা হলো, এটি spy এবং mocking ফিচার সমর্থন করে, যার মাধ্যমে ফাংশনের আউটপুট কিভাবে নিরীক্ষণ করা যায় তা নিয়ন্ত্রণ করা সম্ভব।
BBD ভিত্তিক: JasmineJS একটি Behavior-Driven Development (BDD) ফ্রেমওয়ার্ক, যা টেস্ট লেখার সময় কোডের আচরণ এবং ফাংশনালিটির উপর বেশি জোর দেয়।
Simple Syntax: JasmineJS এর সিনট্যাক্স খুবই সহজ এবং সরল, যার মাধ্যমে টেস্ট কোড লেখা অনেক সহজ হয়ে যায়।
No External Dependencies: JasmineJS অন্য কোনো নির্ভরশীলতা ছাড়া সরাসরি ব্যবহার করা যায়। এটি ব্রাউজার, DOM, বা অন্য কোনো টুলের উপর নির্ভর করে না।
Spies and Mocking: JasmineJS এর spies এবং mocking ফিচারের মাধ্যমে ফাংশন এবং মেথডের কল স্ট্যাটাস পরীক্ষা করা যায়। এর মাধ্যমে কোন ফাংশন কতবার কল করা হয়েছে বা কোনো নির্দিষ্ট আর্গুমেন্ট পাস করা হয়েছে কিনা তা জানা যায়।
Async Support: JasmineJS asynchronous টেস্ট সমর্থন করে, যার মাধ্যমে অ্যাসিঙ্ক্রোনাস ফাংশন এবং প্রমিস টেস্ট করা যায়।
Test Suites: JasmineJS টেস্টগুলোকে describe ব্লকের মাধ্যমে গ্রুপ করা যায়, যা টেস্ট ম্যানেজমেন্টকে আরও সহজ করে।
Matchers: JasmineJS-এ অনেক ধরনের matchers দেওয়া আছে, যেমন toEqual, toBe, toBeTruthy, toContain, ইত্যাদি, যেগুলো টেস্ট assertions হিসেবে ব্যবহার করা হয়।
JasmineJS শুরু করার জন্য প্রথমে আপনার সিস্টেমে এটি ইনস্টল করতে হবে। আপনি JasmineJS বিভিন্নভাবে সেটআপ করতে পারেন, যেমন npm এর মাধ্যমে বা সরাসরি ব্রাউজার থেকে script ট্যাগ ব্যবহার করে।
Node.js প্রজেক্টে JasmineJS ইনস্টল করতে, প্রথমে npm এর মাধ্যমে এটি ইনস্টল করতে হবে:
npm install --save-dev jasmine
ইনস্টলেশন সম্পন্ন হলে Jasmine ইনিশিয়ালাইজ করতে পারেন:
npx jasmine init
এটি spec ডিরেক্টরি তৈরি করবে এবং প্রজেক্টে Jasmine টেস্ট ফাইল যোগ করবে।
আপনি JasmineJS কে সরাসরি ব্রাউজারে script ট্যাগের মাধ্যমে ব্যবহার করতে পারেন। নিচে HTML ফাইলে JasmineJS সেটআপ করার উদাহরণ দেওয়া হলো:
এভাবে, আপনি ব্রাউজার থেকে সরাসরি Jasmine টেস্ট চালাতে পারবেন।
JasmineJS এর প্রধান টেস্টিং কনসেপ্টগুলো হলো describe, it, এবং expect। এই কনসেপ্টগুলো ব্যবহার করে টেস্ট লেখা হয়।
describe ব্লকdescribe হলো একটি টেস্ট suite, যা টেস্ট গ্রুপ করতে সাহায্য করে। এর ভেতরে বিভিন্ন টেস্ট কেস বা it ব্লক থাকে।
describe("A suite for basic math functions", function() {
// টেস্ট কেস এখানে থাকবে
});
it ব্লকit হলো একটি নির্দিষ্ট টেস্ট কেস। এর মাধ্যমে একটি নির্দিষ্ট ফাংশন বা কার্যক্রম টেস্ট করা হয়।
it("should add two numbers correctly", function() {
// টেস্ট লজিক এখানে থাকবে
});
expect ব্লকexpect হলো assertion বা matcher, যা দিয়ে আমরা পরীক্ষা করি ফাংশনটির আউটপুট সঠিক কিনা।
expect(1 + 1).toEqual(2); // টেস্ট সফল হলে এটি পাস করবে
describe("A basic math test", function() {
it("should add two numbers", function() {
var sum = 1 + 1;
expect(sum).toEqual(2); // টেস্ট সফল হবে
});
it("should multiply two numbers", function() {
var product = 2 * 3;
expect(product).toEqual(6); // টেস্ট সফল হবে
});
});
এই উদাহরণে দুটি টেস্ট কেস রয়েছে: একটি যোগফল টেস্ট এবং একটি গুণফল টেস্ট। Jasmine expect ব্লক ব্যবহার করে পরীক্ষা করা হয়েছে যে ফাংশনটি সঠিক আউটপুট প্রদান করছে কিনা।
JasmineJS এ বিভিন্ন ধরনের Matchers রয়েছে, যেগুলোর মাধ্যমে assertions লেখা হয়। কিছু গুরুত্বপূর্ণ Matchers নিচে দেওয়া হলো:
toEqual: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে দুইটি ভ্যালু সমান কিনা।
expect(1 + 1).toEqual(2);
toBe: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে ভ্যালুগুলো একই অবজেক্ট বা রেফারেন্স কিনা।
expect(true).toBe(true);
toBeTruthy: এটি পরীক্ষা করে যে ভ্যালুটি সত্য (truthy) কিনা।
expect(1).toBeTruthy();
toBeFalsy: এটি পরীক্ষা করে যে ভ্যালুটি মিথ্যা (falsy) কিনা।
expect(0).toBeFalsy();
toContain: এটি পরীক্ষার জন্য ব্যবহৃত হয় যে একটি অ্যারের মধ্যে নির্দিষ্ট ভ্যালু আছে কিনা।
expect([1, 2, 3]).toContain(2);
toBeDefined: এটি পরীক্ষা করে যে ভেরিয়েবলটি ডিফাইন্ড আছে কিনা।
expect(someVariable).toBeDefined();
Spies এবং Mocking এর মাধ্যমে আপনি ফাংশনের আচরণ এবং কল স্ট্যাটাস ট্র্যাক করতে পারেন। Spies এর মাধ্যমে আপনি জানতে পারবেন যে কোন ফাংশনটি কতবার কল করা হয়েছে, কোন আর্গুমেন্ট পাস করা হয়েছে, ইত্যাদি।
describe("A spy example", function() {
var calculator = {
add: function(a, b) {
return a + b;
}
};
beforeEach(function() {
spyOn(calculator, 'add'); // add ফাংশনের উপর স্পাই করা হয়েছে
});
it("should track calls to the add function", function() {
calculator.add(1, 2);
expect(calculator.add).toHaveBeenCalled();
expect(calculator.add).toHaveBeenCalledWith(1, 2);
});
});
এখানে spyOn ব্যবহার করে calculator.add ফাংশনের উপর স্পাই করা হয়েছে এবং এটি ট্র্যাক করা হয়েছে যে ফাংশনটি কতবার কল করা হয়েছে এবং কি আর্গুমেন্ট পাস করা হয়েছে।
JasmineJS asynchronous ফাংশন এবং প্রমিস টেস্ট করার ক্ষমতা রাখে। অ্যাসিঙ্ক টেস্টের জন্য Jasmine এ done ফাংশন ব্যবহার করা হয়, যা টেস্ট সম্পন্ন হওয়ার পর কল করা হয়।
describe("An async test", function() {
it("should fetch data asynchronously", function(done) {
setTimeout(function() {
var data = "Hello, Jasmine!";
expect(data).toEqual("Hello, Jasmine!");
done(); // টেস্ট শেষ করার জন্য done ফাংশন কল করতে হবে
}, 1000);
});
});
এখানে setTimeout ফাংশন দিয়ে অ্যাসিঙ্ক্রোনাস টেস্ট করা হয়েছে এবং done ফাংশন কল করে টেস্ট শেষ করা হয়েছে।
সারল্য: JasmineJS এর সিনট্যাক্স খুবই সহজ, ফলে ডেভেলপাররা কম সময়ে টেস্ট কেস লিখতে পারে।
BDD ভিত্তিক টেস্টিং: JasmineJS বিহেভিয়ার-ড্রাইভেন ডেভেলপমেন্ট (BDD) ফ্রেমওয়ার্ক, যা কোডের আচরণ অনুযায়ী টেস্ট কেস লিখতে সাহায্য করে।
Spies এবং Mocking: JasmineJS এর spies এবং mocking ফিচারের মাধ্যমে ফাংশন কল ট্র্যাক করা এবং আউটপুট নিরীক্ষণ করা খুবই সহজ।
ব্রাউজার নিরপেক্ষ: JasmineJS ব্রাউজার বা DOM এর উপর নির্ভর করে না, ফলে এটি বিভিন্ন প্ল্যাটফর্মে ব্যবহার করা যায়।
বড় প্রজেক্টে ব্যবহারের ক্ষেত্রে সীমাবদ্ধতা: বড় স্কেল অ্যাপ্লিকেশন টেস্ট করার সময় JasmineJS কিছু ক্ষেত্রে জটিল হতে পারে, বিশেষ করে অনেক বেশি টেস্ট কেস পরিচালনার ক্ষেত্রে।
কাস্টম রিপোর্টিং: JasmineJS এ কাস্টম টেস্ট রিপোর্ট তৈরি করা সীমিত হতে পারে।
JasmineJS হলো একটি শক্তিশালী এবং সহজে ব্যবহারযোগ্য JavaScript টেস্টিং ফ্রেমওয়ার্ক, যা ডেভেলপারদের জন্য ইউনিট টেস্ট এবং ইন্টিগ্রেশন টেস্ট করতে সহায়ক। এর সরল সিনট্যাক্স, spies, এবং asynchronous টেস্টিং ক্ষমতা এটি ডেভেলপারদের জন্য জনপ্রিয় করে তুলেছে। ছোট ও মাঝারি আকারের প্রজেক্টে JasmineJS ব্যবহার করা খুবই কার্যকর, বিশেষ করে যদি আপনি BDD পদ্ধতিতে টেস্টিং করতে চান।
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ
Are you sure to start over?